簡介靜態網站、SPA、SSR、SSG—GatsbyJs 從零開始
2022-12-10 Sat
本文提及以下重點
- GatsbyJS 介紹
- 靜態網站
- SPA 網頁 (Single Page Application)
- SSR 網頁 (Server Side Rendered)
- Static site generator (gatsby)
- Gatsby 和 Data
- 開始 Gatsby
GatsbyJS 介紹
- 使用 Static site generator (SSG) 靜態網站產生器
- 使用模板 (template) 和組件 (component) 和資料 (data)
- 使用 React 和 GraphQL 技術結合
- Gatsby 稱他自己是現代網站產生器
以下簡介從靜態網站→SPA→SSR→SSG→GatsbyJs
靜態網站
- 使用靜態 HTML 網頁 (可能包含 JS 和 CSS)
- 頁面更新是使用 CDN 或者 web 伺服器
缺點
- 難以更新和維護網頁 (由於有很多類似的 code 是在每一頁)
- 載入新頁面的時候需要每次都和伺服器發出請求 (也造成網站下載過慢)
- 通常不會包含動態的資料
SPA 網頁 (Single Page Application)
- 像是 React/Vue 網站
- 只有對伺服器單次請求一個初始的頁面 (空值)
- 除了 (routing 和 data) 是以外其他都是藉由 SPA 的機制在瀏覽器解析
缺點
- 網站頁面對於 SEO 不友善,因為初始的網頁是空白的 HTML
SSR 網頁 (Server Side Rendered)
- 頁面渲染是藉由伺服器處理後再回應每個請求
- 伺服器資源的資料或使用模板來渲染 HTML 頁面
- 將結果頁面傳回給瀏覽器
缺點
- 對於每個新的請求需要被處理後才是每個頁面
- 伺服器處理資料和渲染頁面需要時間
Static site generator (gatsby)
- 在建置時期 (build-time) 被編譯成靜態頁面 (Static pages) (但在部署前)
- Gatsby sites/pages 是使用 React components
- 靜態頁面是之後部署網頁
- 初始請求後網頁的表現像是 SPA 一樣
Gatsby 和 Data
- 可以使用很多不同的資料來源到你的網站
- 例如 WordPress,shopify,contentful,firebase,filesystem
- Gatsby 結合全部的資料源頭到 GraphQL 層 Gatsby 結合全部的資料源頭到 GraphQL 層
好處是我們不需要在乎資料源頭是在哪裡,我們可以使用組件相同的方式查詢和訪問
如下圖

Q&A
- Gatsby 被稱之為靜態網頁生成器 (Static site generator),所以就不能像動態網頁一樣可以有留言、帳號登入、聊天室的功能了嗎?
- 現在由於前後端分離,因此還是可以串接 API 的方式做到上述功能,靜態網頁生成器主要是說明在部署的時候是已經決定好的內容 (靜態),不過還是可以透過發 API 的方式做到動態的行為。
開始 Gatsby
基礎知識
關於 Gatsby 官方提出你所需要的背景知識,包括但不限於 HTML、CSS、Javascript、command line、React、GraphQL
另外也必須安裝如 Node.js v14.15 以上、Git、Gatsby CLI、Visual Studio Code
Gatsby 起手式 - 安裝 GatsbyCLI
首先全域安裝 gatsby 的 CLI
npm install -g gatsby-cli
在 npm 安裝完畢之後可以輸入gatsby --version,如果出現了版本號,表示安裝成功。
另外可以查看可用的指令
gatsby --help
建立一個 Gatsby 基本頁面
Gatsby new
先前安裝完 gatsbyCLI 後,在 terminal 輸入gatsby new
會問你以下問題
- What would you like to call your site?
- What would you like to name the folder where your site will be created?
- Will you be using a CMS?
- Would you like to install a styling system?
- Would you like to install additional features with other plugins?
如下圖

基本上都先勾選 No(or I’ll add it later) 和 Done 最後再輸入 Y
安裝完畢之後可以使用 vs code 開啟
可以打開package.json檔案,他會預先幫你安裝的東西如下。
{
"name": "test",
"version": "1.0.0",
"private": true,
"description": "test",
"author": "ketyykes",
"keywords": [
"gatsby"
],
"scripts": {
"develop": "gatsby develop",
"start": "gatsby develop",
"build": "gatsby build",
"serve": "gatsby serve",
"clean": "gatsby clean"
},
"dependencies": {
"gatsby": "^4.24.4",
"react": "^18.1.0",
"react-dom": "^18.1.0"
}
}
這時候在 terminal 輸入npm run start
這時候打開http://localhost:8000/的網頁就能看到 gatsby 預設的頁面
設置測試環境的 port 號
gatsby 預設的 port 是 8000 如果需要改變預設的 port 號可以在 package.json 描述檔的地方添加-p XXXX
打開package.json將 start 後面添加-p 8001,表示預設開啟是 8001 port
"scripts": {
"develop": "gatsby develop",
"start": "gatsby develop -p 8001",
"build": "gatsby build",
"serve": "gatsby serve",
"clean": "gatsby clean"
},接下來你就可以看到有一個預先建立的頁面如下

可以觀看 src 的資料夾內容如下
├─images
│ icon.png
│
└─pages
404.js
index.js接下來就可以開始編輯你的 index.js 的頁面檔 另外也能編輯 404 的頁面了